package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.CustomerStageEntity;

import java.util.List;
import java.util.Map;

/**
 * @author haibin.zhang
 * @version v1.0
 * @date 2019/2/13 11:05
 * @since v1.0
 */
public interface CustomerStageModel extends IModel<CustomerStageEntity> {

    @Override
    List<CustomerStageEntity> findEntitys(Map<String, Object> param);

    /**
     * 通过主键获取数据
     *
     * @param key    主键
     * @param corpid 公司id
     * @return CustomerStageEntity
     * @author GuoJun.HU
     * @date 2019/2/18 22:08
     * @since V1.0
     */
    CustomerStageEntity getByKey(Long key, String corpid);

    /**
     * 通过formId + code获取到一个阶段实体
     * 同一个form下code肯定唯一，但是多个form之间可能不唯一（新初始化的form都用的默认阶段code - 1、2、3、4...）
     * @param corpid 公司id
     * @param formId 模板id
     * @param code 阶段code
     * @return com.xbongbong.saas.domain.entity.CustomerStageEntity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    CustomerStageEntity getByCode(String corpid, Long formId, String code);

    /**
     * 保存
     *
     * @param  customerStageEntity 实体
     * @author GuoJun.HU
     * @since V1.0
     * @return Long
     * @date 2019/2/18 22:24
     */
    Long save(CustomerStageEntity customerStageEntity) throws XbbException;

    /**
     * 获取默认的客户阶段
     *
     * @return 客户阶段列表
     */
    List<CustomerStageEntity> getDefaultList();

    /**
     * 批量插入数据
     *
     * @param list 实体列表
     * @author GuoJun.HU
     * @date 2019/2/18 22:07
     * @since V1.0
     */
    void insertBatch(List<CustomerStageEntity> list);

    /**
     * 获取列表
     * @return
     */
    List<CustomerStageEntity> getList(String corpid,Long formId, Integer enable);

    void updateBatch(List<CustomerStageEntity> customerStageEntityList, String corpid);

    void updateBatchDefaultAndLinkOption(List<CustomerStageEntity> customerStageEntityList, String corpid);

    void updateBatch4MirrorRollback(List<CustomerStageEntity> customerStageEntityList, String corpid);

    void updateBatch4Script(List<CustomerStageEntity> customerStageEntityList);

    void insertBatch4Script(List<CustomerStageEntity> list);

    Integer insert4Script(CustomerStageEntity entity);

    Integer deleteBatch(List<CustomerStageEntity> customerStageEntityList, String corpid);
}
